﻿#region Copyright information
// 
// Copyright © 2005-2013 Yongkee Cho. All rights reserved.
// 
// This code is a part of the Biological Object Library and governed under the terms of the
// GNU Lesser General  Public License (LGPL) version 2.1 which accompanies this distribution.
// For more information on the LGPL, please visit http://bol.codeplex.com/license.
// 
// - Filename: IGraph.cs
// - Author: Yongkee Cho
// - Email: yongkeecho@gmail.com
// - Date Created: 2013-01-24 4:34 PM
// - Last Modified: 2013-01-25 3:59 PM
// 
#endregion
using System;
using System.Collections.Generic;

namespace BOL.Algorithms.Graph
{
    public interface IGraph
    {
        bool IsDirected { get; }
        int Order { get; }
        int Size { get; }
        int Multiplicity { get; }
        bool IsNull { get; }
        bool IsSimple { get; }

        int[][] DegreeMatrix();
        bool[][] AdjacencyMatrix();
        int[][] IncidenceMatrix();
        int[][] LaplacianMatrix();
        int[][] DistanceMatrix();
    }

    public interface IVertexListGraph<TVertex> : IGraph, ICloneable
    {
        IList<TVertex> Vertices { get; }
    }

    public interface IEdgeListGraph<TVertex, TEdge> : IGraph, ICloneable
        where TEdge: IEdge<TVertex>
    {
        IList<TEdge> Edges { get; } 
    }

    public interface IVertexEdgeListGraph<TVertex, TEdge> : IGraph, ICloneable
        where TEdge : IEdge<TVertex>
    {
        IList<TVertex> Vertices { get; }
        IList<TEdge> Edges { get; }
    }

    public interface IVertexDictionaryGraph<TVertex> : IGraph, ICloneable
    {
        IDictionary<TVertex, IEnumerable<TVertex>> Dictionary { get; }
    }
}
